<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
            时间: O(n ^ 2) 为啥是这个
            空间：O(1)为啥是这个
        */
        const generateMatrix = function (n) {
            // 起始位置
            let startX = 0, 
            startY = 0;
            // 旋转圈数
            let loop = Math.floor(n / 2)
            // 中间位数
            let mid = Math.floor(n / 2)
            // 每一层填充元素个数
            let offset = 1;
            // 更新填充数字
            let count = 1;
            // 初始化操作数组
            let res = new Array(n).fill(0).map(() => new Array(n).fill(0))

            while (loop--) {
                let row = startX, col = startY;
                // 上行从左到右（左闭右开）
                for (; col < n - offset; col++) {
                    res[row][col] = count++
                }
                // 右列从上到下（左闭右开）
                for (; row < n - offset; row++) {
                    res[row][col] = count++
                }
                // 下行从右到左（左闭右开）
                for (; col > startY; col--) {
                    res[row][col] = count++
                }
                // 下行从右到左（左闭右开）
                for (; row > startX; row--) {
                    res[row][col] = count++
                }

                // 更新起始位置
                startX++;
                startY++;

                // 更新offset
                offset += 1;
            }

            // 如果n为奇数的话，需要单独给矩阵最中间的位置赋值
            if (n % 2 === 1) {
                res[mid][mid] = n ** 2
            }

            return res
        }
        console.log(generateMatrix(3), 'generateMatrix(3)');
        console.log(generateMatrix(4), 'generateMatrix(3)');
    </script>
</body>
</html>